home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Science / RasMol2 / abstree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-28  |  10.6 KB  |  289 lines  |  [TEXT/KAHL]

  1. /* abstree.h
  2.  * RasMol2 Molecular Graphics
  3.  * Roger Sayle, October 1994
  4.  * Version 2.5
  5.  */
  6.  
  7. #define OpCode(x) (((x)->type)&0x0f)
  8.  
  9. /* Operator Types */
  10. #define OpAnd            0x01
  11. #define OpOr             0x02
  12. #define OpNot            0x03
  13. #define OpEqual          0x04
  14. #define OpNotEq          0x05
  15. #define OpLess           0x06
  16. #define OpMore           0x07
  17. #define OpLessEq         0x08
  18. #define OpMoreEq         0x09
  19. #define OpConst          0x0a
  20. #define OpWithin         0x0b
  21. #define OpMember         0xac
  22.  
  23. #define OpLftProp        0x10
  24. #define OpLftVal         0x20
  25. #define OpRgtProp        0x40
  26. #define OpRgtVal         0x80
  27.  
  28. /* Property fields */
  29. #define PropIdent        1
  30. #define PropXCord        2
  31. #define PropYCord        3
  32. #define PropZCord        4
  33. #define PropTemp         5
  34. #define PropRad          6
  35. #define PropResId        7
  36. #define PropName         8
  37. #define PropChain        9
  38. #define PropResName      10
  39. #define PropSelect       11
  40. #define PropElemNo       12
  41.  
  42. #define PredAbsOrd(x)    ((x)-20)
  43. #define PredAbsChr(x)    ((x)+20)
  44.  
  45. #define PredAlpha        20
  46. #define PredAmino        21
  47. #define PredAT           22
  48. #define PredBonded       23
  49. #define PredCG           24
  50. #define PredCystine      25
  51. #define PredDNA          26
  52. #define PredHelix        27
  53. #define PredHetero       28
  54. #define PredHydrogen     29
  55. #define PredIon          30
  56. #define PredLigand       31
  57. #define PredMainChain    32
  58. #define PredNucleic      33
  59. #define PredProtein      34
  60. #define PredPurine       35
  61. #define PredPyrimidine   36
  62. #define PredRNA          37
  63. #define PredSelected     38 /* Unused! */
  64. #define PredSheet        39
  65. #define PredSidechain    40
  66. #define PredSolvent      41
  67. #define PredTurn         42
  68. #define PredWater     43
  69.  
  70. #define PredAcidic       44
  71. #define PredAcyclic      45
  72. #define PredAliphatic    46
  73. #define PredAromatic     47
  74. #define PredBasic        48
  75. #define PredBuried       49
  76. #define PredCharged      50
  77. #define PredCyclic       51
  78. #define PredHydrophobic  52
  79. #define PredLarge        53
  80. #define PredMedium       54
  81. #define PredNeutral      55
  82. #define PredPolar        56
  83. #define PredSmall        57
  84. #define PredSurface      58
  85.  
  86.  
  87.  
  88. #define SetSize     10
  89. typedef struct _AtomSet {
  90.     struct _AtomSet __far *next;
  91.     Atom __far *data[SetSize];
  92.         int count;
  93.         } AtomSet;
  94.         
  95. typedef union {
  96.     AtomSet __far *set;
  97.     struct _Expr *ptr;
  98.         Long limit;
  99.     int val;
  100.     } Branch;
  101.  
  102. typedef struct _Expr {
  103.     int type;
  104.         Branch rgt;
  105.         Branch lft;
  106.     } Expr;
  107.  
  108. /* CPK Colour Indices
  109.  *  0 Light Grey    1 Sky Blue      2 Red           3 Yellow
  110.  *  4 White         5 Pink          6 Golden Rod    7 Blue
  111.  *  8 Orange        9 Dark Grey    10 Brown        11 Purple
  112.  * 12 Deep Pink    13 Green        14 Fire Brick   15 Mid Green
  113.  */
  114.  
  115. #define MAXELEMNO  104
  116. typedef struct {
  117.            char symbol[2];
  118.            int covalrad;
  119.            int vdwrad;
  120.            int cpkcol;
  121.            char *name;
  122.         } ElemStruct;
  123.  
  124. /* Structures with Implicit Hydrogens */
  125. #define VDWCarbon    468
  126. #define VDWNitrogen  375
  127. #define VDWOxygen    350
  128. #define VDWSulphur   462
  129.  
  130. #ifdef ABSTREE
  131. ElemStruct Element[MAXELEMNO] =  {
  132.     { { ' ', ' ' }, 170, 360, 12, ""             },  /*   0 */
  133.     { { 'H', ' ' },  80, 275,  4, "HYDROGEN"     },  /*   1 */
  134.     { { 'H', 'e' }, 400, 550,  5, "HELIUM"       },  /*   2 */
  135.     { { 'L', 'i' }, 170, 305, 14, "LITHIUM"      },  /*   3 */
  136.     { { 'B', 'e' },  88, 157, 12, "BERYLLIUM"    },  /*   4 */
  137.     { { 'B', ' ' }, 205, 387, 13, "BORON"        },  /*   5 */
  138.     { { 'C', ' ' }, 170, 387,  0, "CARBON"       },  /*   6 */
  139.     { { 'N', ' ' }, 188, 350,  1, "NITROGEN"     },  /*   7 */
  140.     { { 'O', ' ' }, 182, 337,  2, "OXYGEN"       },  /*   8 */
  141.     { { 'F', ' ' }, 180, 325,  6, "FLUORINE"     },  /*   9 */
  142.     { { 'N', 'e' }, 280, 505, 12, "NEON"         },  /*  10 */
  143.     { { 'N', 'a' }, 243, 550,  7, "SODIUM"       },  /*  11 */
  144.     { { 'M', 'g' }, 275, 375, 15, "MAGNESIUM"    },  /*  12 */
  145.     { { 'A', 'l' }, 338, 375,  9, "ALUMINIUM"    },  /*  13 */
  146.     { { 'S', 'i' }, 300, 550,  6, "SILICON"      },  /*  14 */
  147.     { { 'P', ' ' }, 262, 470,  8, "PHOSPHORUS"   },  /*  15 */
  148.     { { 'S', ' ' }, 255, 452,  3, "SULPHUR"      },  /*  16 */
  149.     { { 'C', 'l' }, 248, 437, 13, "CHLORINE"     },  /*  17 */
  150.     { { 'A', 'r' }, 392, 692, 12, "ARGON"        },  /*  18 */
  151.     { { 'K', ' ' }, 332, 597, 12, "POTASSIUM"    },  /*  19 */
  152.     { { 'C', 'a' }, 248, 487,  9, "CALCIUM"      },  /*  20 */
  153.     { { 'S', 'c' }, 360, 330, 12, "SCANDIUM"     },  /*  21 */
  154.     { { 'T', 'i' }, 368, 487,  9, "TITANIUM"     },  /*  22 */
  155.     { { 'V', ' ' }, 332, 265, 12, "VANADIUM"     },  /*  23 */
  156.     { { 'C', 'r' }, 338, 282,  9, "CHROMIUM"     },  /*  24 */
  157.     { { 'M', 'n' }, 338, 297,  9, "MANGANESE"    },  /*  25 */
  158.     { { 'F', 'e' }, 335, 487,  8, "IRON"         },  /*  26 */
  159.     { { 'C', 'o' }, 332, 282, 12, "COBALT"       },  /*  27 */
  160.     { { 'N', 'i' }, 375, 310, 10, "NICKEL"       },  /*  28 */
  161.     { { 'C', 'u' }, 380, 287, 10, "COPPER"       },  /*  29 */
  162.     { { 'Z', 'n' }, 362, 287, 10, "ZINC"         },  /*  30 */
  163.     { { 'G', 'a' }, 305, 387, 12, "GALLIUM"      },  /*  31 */
  164.     { { 'G', 'e' }, 292, 999, 12, "GERMANIUM"    },  /*  32 */  /* 1225? */
  165.     { { 'A', 's' }, 302, 207, 12, "ARSENIC"      },  /*  33 */
  166.     { { 'S', 'e' }, 305, 225, 12, "SELENIUM"     },  /*  34 */
  167.     { { 'B', 'r' }, 302, 437, 10, "BROMINE"      },  /*  35 */
  168.     { { 'K', 'r' }, 400, 475, 12, "KRYPTON"      },  /*  36 */
  169.     { { 'R', 'b' }, 368, 662, 12, "RUBIDIUM"     },  /*  37 */
  170.     { { 'S', 'r' }, 280, 505, 12, "STRONTIUM"    },  /*  38 */
  171.     { { 'Y', ' ' }, 445, 402, 12, "YTTRIUM"      },  /*  39 */
  172.     { { 'Z', 'r' }, 390, 355, 12, "ZIRCONIUM"    },  /*  40 */
  173.     { { 'N', 'b' }, 370, 332, 12, "NIOBIUM"      },  /*  41 */
  174.     { { 'M', 'o' }, 368, 437, 12, "MOLYBDENUM"   },  /*  42 */
  175.     { { 'T', 'c' }, 338, 450, 12, "TECHNETIUM"   },  /*  43 */
  176.     { { 'R', 'u' }, 350, 300, 12, "RUTHENIUM"    },  /*  44 */
  177.     { { 'R', 'h' }, 362, 305, 12, "RHODIUM"      },  /*  45 */
  178.     { { 'P', 'd' }, 375, 360, 12, "PALLADIUM"    },  /*  46 */
  179.     { { 'A', 'g' }, 398, 387,  9, "SILVER"       },  /*  47 */
  180.     { { 'C', 'd' }, 422, 437, 12, "CADMIUM"      },  /*  48 */
  181.     { { 'I', 'n' }, 407, 362, 12, "INDIUM"       },  /*  49 */
  182.     { { 'S', 'n' }, 365, 417, 12, "TIN",         },  /*  50 */
  183.     { { 'S', 'b' }, 155, 280, 12, "ANTIMONY"     },  /*  51 */
  184.     { { 'T', 'e' }, 175, 315, 12, "TELLURIUM"    },  /*  52 */
  185.     { { 'I', ' ' }, 350, 437, 11, "IODINE"       },  /*  53 */
  186.     { { 'X', 'e' }, 425, 525, 12, "XENON"        },  /*  54 */
  187.     { { 'C', 's' }, 418, 752, 12, "CAESIUM"      },  /*  55 */
  188.     { { 'B', 'a' }, 335, 602,  8, "BARIUM"       },  /*  56 */
  189.     { { 'L', 'a' }, 255, 457, 12, "LANTHANUM"    },  /*  57 */
  190.     { { 'C', 'e' }, 258, 465, 12, "CERIUM"       },  /*  58 */
  191.     { { 'P', 'r' }, 225, 405, 12, "PRASEODYMIUM" },  /*  59 */
  192.     { { 'N', 'd' }, 248, 447, 12, "NEODYMIUM"    },  /*  60 */
  193.     { { 'P', 'm' }, 245, 440, 12, "PROMETHIUM"   },  /*  61 */
  194.     { { 'S', 'm' }, 240, 435, 12, "SAMARIUM"     },  /*  62 */
  195.     { { 'E', 'u' }, 273, 490, 12, "EUROPIUM"     },  /*  63 */
  196.     { { 'G', 'd' }, 235, 422, 12, "GADOLINIUM"   },  /*  64 */
  197.     { { 'T', 'b' }, 230, 415, 12, "TERBIUM"      },  /*  65 */
  198.     { { 'D', 'y' }, 228, 407, 12, "DYSPROSIUM"   },  /*  66 */
  199.     { { 'H', 'o' }, 222, 402, 12, "HOLMIUM"      },  /*  67 */
  200.     { { 'E', 'r' }, 220, 397, 12, "ERBIUM"       },  /*  68 */
  201.     { { 'T', 'm' }, 218, 392, 12, "THULIUM"      },  /*  69 */
  202.     { { 'Y', 'b' }, 215, 385, 12, "YTTERBIUM"    },  /*  70 */
  203.     { { 'L', 'u' }, 212, 382, 12, "LUTETIUM"     },  /*  71 */
  204.     { { 'H', 'f' }, 195, 350, 12, "HAFNIUM"      },  /*  72 */
  205.     { { 'T', 'a' }, 170, 305, 12, "TANTALUM"     },  /*  73 */
  206.     { { 'W', ' ' }, 175, 315, 12, "TUNGSTEN"     },  /*  74 */
  207.     { { 'R', 'e' }, 180, 325, 12, "RHENIUM"      },  /*  75 */
  208.     { { 'O', 's' }, 220, 395, 12, "OSMIUM"       },  /*  76 */
  209.     { { 'I', 'r' }, 170, 305, 12, "IRIDIUM"      },  /*  77 */
  210.     { { 'P', 't' }, 325, 387, 12, "PLATINUM"     },  /*  78 */
  211.     { { 'A', 'u' }, 335, 362,  6, "GOLD"         },  /*  79 */
  212.     { { 'H', 'g' }, 275, 495, 12, "MERCURY"      },  /*  80 */
  213.     { { 'T', 'l' }, 238, 427, 12, "THALLIUM"     },  /*  81 */
  214.     { { 'P', 'b' }, 300, 540, 12, "LEAD"         },  /*  82 */
  215.     { { 'B', 'i' }, 240, 432, 12, "BISMUTH"      },  /*  83 */
  216.     { { 'P', 'o' }, 168, 302, 12, "POLONIUM"     },  /*  84 */
  217.     { { 'A', 't' }, 155, 280, 12, "ASTATINE"     },  /*  85 */
  218.     { { 'R', 'n' }, 475, 575, 12, "RADON"        },  /*  86 */
  219.     { { 'F', 'r' }, 450, 810, 12, "FRANCIUM"     },  /*  87 */
  220.     { { 'R', 'a' }, 358, 642, 12, "RADIUM"       },  /*  88 */
  221.     { { 'A', 'c' }, 295, 530, 12, "ACTINIUM"     },  /*  89 */
  222.     { { 'T', 'h' }, 255, 460, 12, "THORIUM"      },  /*  90 */
  223.     { { 'P', 'a' }, 222, 400, 12, "PROTACTINIUM" },  /*  91 */
  224.     { { 'U', ' ' }, 242, 437, 12, "URANIUM"      },  /*  92 */
  225.     { { 'N', 'p' }, 238, 427, 12, "NEPTUNIUM"    },  /*  93 */
  226.     { { 'P', 'u' }, 232, 417, 12, "PLUTONIUM"    },  /*  94 */
  227.     { { 'A', 'm' }, 230, 415, 12, "AMERICIUM"    },  /*  95 */
  228.     { { 'C', 'm' }, 228, 412, 12, "CURIUM"       },  /*  96 */
  229.     { { 'B', 'k' }, 225, 410, 12, "BERKELIUM"    },  /*  97 */
  230.     { { 'C', 'f' }, 222, 407, 12, "CALIFORNIUM"  },  /*  98 */
  231.     { { 'E', 's' }, 220, 405, 12, "EINSTEINIUM"  },  /*  99 */
  232.     { { 'F', 'm' }, 218, 402, 12, "FERMIUM"      },  /* 100 */
  233.     { { 'M', 'd' }, 215, 400, 12, "MENDELEVIUM"  },  /* 101 */
  234.     { { 'N', 'o' }, 212, 397, 12, "NOBELIUM"     },  /* 102 */
  235.     { { 'L', 'r' }, 210, 395, 12, "LAWRENCIUM"   }   /* 103 */ /* Lw? */
  236.         };
  237.  
  238.  
  239. Expr *QueryExpr;
  240. Chain __far *QChain;
  241. Group __far *QGroup;
  242. Atom __far *QAtom;
  243.  
  244. #else
  245. extern ElemStruct Element[MAXELEMNO];
  246.  
  247. extern Expr *QueryExpr;
  248. extern Chain __far *QChain;
  249. extern Group __far *QGroup;
  250. extern Atom __far *QAtom;
  251.  
  252. #ifdef FUNCPROTO
  253. Expr *AllocateNode();
  254. void DeAllocateExpr( Expr* );
  255. int EvaluateExpr( Expr* );
  256. int DefineSetExpr( char*, Expr* );
  257. Expr *LookUpSetExpr( char* );
  258. AtomSet __far *BuildAtomSet( Expr* );
  259. void DeleteAtomSet( AtomSet __far* );
  260. Expr *LookUpElement( char* );
  261.  
  262. int ElemVDWRadius( int );
  263. int GetElemNumber( Atom __far* );
  264. int ParsePrimitiveExpr( char** );
  265. void FormatLabel( Chain __far*, Group __far*, Atom __far*, char*, char* );
  266. void InitialiseAbstree();
  267. void ResetSymbolTable();
  268.  
  269. #else /* non-ANSI C compiler */
  270. Expr *AllocateNode();
  271. void DeAllocateExpr();
  272. int EvaluateExpr();
  273. int DefineSetExpr();
  274. Expr *LookUpSetExpr();
  275. AtomSet __far *BuildAtomSet();
  276. void DeleteAtomSet();
  277. Expr *LookUpElement();
  278.  
  279. int ElemVDWRadius();
  280. int GetElemNumber();
  281. int ParsePrimitiveExpr();
  282. void FormatLabel();
  283. void InitialiseAbstree();
  284. void ResetSymbolTable();
  285.  
  286. #endif
  287. #endif
  288.  
  289.